const http = require('http');
const fs = require('fs');
const path = require('path');
const url = require('url');

// 定义不同文件类型的 MIME 类型
const mimeTypes = {
  '.html': 'text/html',
  '.js': 'text/javascript',
  '.css': 'text/css',
  '.json': 'application/json',
  '.png': 'image/png',
  '.jpg': 'image/jpeg',
  '.gif': 'image/gif',
  '.svg': 'image/svg+xml',
  '.ico': 'image/x-icon',
  '.woff': 'font/woff'
};

// 获取当前脚本所在目录作为根目录
const rootDirectory = __dirname;

const server = http.createServer((req, res) => {
  console.log(`Request: ${req.method} ${req.url}`);
  
  // 解析请求的URL，去掉查询参数
  const parsedUrl = url.parse(req.url);
  let filePath = '.' + parsedUrl.pathname;
  
  // 处理API请求
  if (filePath.startsWith('./user/') || filePath.startsWith('./api/')) {
    // 对于API请求，我们简单返回一个错误信息，因为前端应该直接访问后端服务器
    res.writeHead(404, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ 
      flag: false, 
      message: 'API请求应该直接发送到后端服务器，而不是静态文件服务器。请确保后端服务正在运行在正确的端口上。' 
    }));
    return;
  }
  
  // 如果请求的是根路径，则默认返回 login.html
  if (filePath === './') {
    filePath = './login.html';
  }
  
  // favicon处理
  if (filePath === './favicon.ico') {
    // 返回一个空的ico文件或404
    res.writeHead(404, { 'Content-Type': 'image/x-icon' });
    res.end();
    return;
  }
  
  // 使用绝对路径
  filePath = path.join(rootDirectory, filePath);
  
  // 获取文件扩展名
  const extname = String(path.extname(filePath)).toLowerCase();
  const contentType = mimeTypes[extname] || 'application/octet-stream';
  
  console.log(`尝试读取文件: ${filePath}`);
  
  // 读取文件内容
  fs.readFile(filePath, (error, content) => {
    if (error) {
      if (error.code === 'ENOENT') {
        // 文件未找到，返回 404 页面
        console.log(`文件未找到: ${filePath}`);
        fs.readFile(path.join(rootDirectory, './404.html'), (err, content) => {
          if (err) {
            res.writeHead(404);
            res.end('404 Not Found');
            return;
          }
          res.writeHead(404, { 'Content-Type': 'text/html' });
          res.end(content, 'utf-8');
        });
      } else {
        // 其他服务器错误
        console.log(`服务器错误: ${error.code}`);
        res.writeHead(500);
        res.end(`Server Error: ${error.code}`);
      }
    } else {
      // 成功读取文件，返回文件内容
      console.log(`成功读取文件: ${filePath}`);
      res.writeHead(200, { 'Content-Type': contentType });
      res.end(content, 'utf-8');
    }
  });
});

const PORT = 3000;

server.listen(PORT, () => {
  console.log(`超市账单管理系统前端服务器运行在 http://localhost:${PORT}/`);
  console.log('请在浏览器中打开上述地址来访问系统');
  console.log('注意：要使用登录功能，需要确保后端服务也在运行');
});